import observe  from "./Observe.js"
 
 // 检测某个对象上的某个属性，  传入的值 为 val
export default function defineReactive(data,key,val){

    console.log('我是defineReactive',data , key)
    // val  闭包环境
    if( arguments.length == 2 ){
        val = data[key]
    }
    
    // 子元素要进行observe，至此，形成拉递归，这个递归不是函数自己调自己，而是多个函数，类循环调用
    let childOb = observe(val)

    Object.defineProperty(data,key, {
        // 可枚举
        enumerable: true,
        // 可配置，比如可以被delete
        configurable: true,

        get(){
            console.log('你试图访问obj的' + key +'属性')
            return val
        },
        set(newVal){
            console.log('你试图修改obj的' + key +'属性',newVal)
            if( val === newVal ){
                return
            }
            val = newVal
            // 当设置拉新值， 新值也要被 observe
            childOb = observe(val)
        }
    })
}